import cv2 as cv
import numpy as np

# 物体跟踪。我们知道怎样将一幅图像从 BGR 转换到 HSV，利用这一点来提取带有某个特定颜色的物体。
# 在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中，要提取的是一个蓝色的物体。
# 代码按下列要求完成：（35分）
# （10）从图片文件opencv_logo.png中获取图像
img = cv.imread('data/opencv_logo.png')

# （11）将图像转换到 HSV 空间
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)

# （12）设置HSV阈值到蓝色范围
bgr_tgt = (255, 0, 0)
bgr_tgt = np.expand_dims(bgr_tgt, (0, 1))
bgr_tgt = np.uint8(bgr_tgt)
hsv_tgt = cv.cvtColor(bgr_tgt, cv.COLOR_BGR2HSV)
print(hsv_tgt)
h_tgt = hsv_tgt[0, 0, 0]
print(h_tgt)
lower_border = np.uint8((h_tgt - 10, 100, 100))
upper_border = np.uint8((h_tgt + 10, 255, 255))

# （13）获取蓝色物体
img_hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
mask = cv.inRange(img_hsv, lower_border, upper_border)
img_mask = cv.cvtColor(mask, cv.COLOR_GRAY2BGR)
img_masked = cv.bitwise_and(img, img, mask=mask)

# （14）参照下图显示输出结果
img_all = np.concatenate((img, img_mask, img_masked), axis=1)
cv.imshow('Trace TGT', img_all)
cv.waitKey(0)
cv.destroyAllWindows()
print('OK')
